home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.1 (Developer) [x86] / NeXT Step 3.1 Intel dev.cdr.dmg / NextDeveloper / Headers / driverkit / i386 / directDevice.h next >
Encoding:
Text File  |  1993-04-02  |  6.0 KB  |  220 lines

  1. /*
  2.  * Copyright (c) 1993 NeXT Computer, Inc.
  3.  *
  4.  * ISA/EISA direct device interface.
  5.  *
  6.  * HISTORY
  7.  *
  8.  * 10Jan93 Brian Pinkerton at NeXT
  9.  *    Created.
  10.  *
  11.  */
  12. #import <driverkit/IODevice.h>
  13. #import <driverkit/IODirectDevice.h>
  14. #import <driverkit/IODeviceDescription.h>
  15. #import <driverkit/i386/IOEISADeviceDescription.h>
  16. #import <driverkit/i386/driverTypes.h>
  17.  
  18.  
  19. void IOSendInterrupt(void *identity, void *state, unsigned int msgId);
  20.  
  21. @interface IODirectDevice(IOEISADirectDevice)
  22.  
  23. /*
  24.  *  Initialization and free.  Call the initFromDeviceDescription with a
  25.  *  description of type ATDeviceDescription (it's typed as IODevDesc to
  26.  *  avoid bogus compiler warnings!)
  27.  */
  28. - (IODirectDevice *) initFromDeviceDescription:(IODeviceDescription *) devDesc;
  29. - free;
  30.  
  31. /*
  32.  *  Dealing with interrupts.
  33.  */
  34. - (IOReturn) enableAllInterrupts;
  35. - (void) disableAllInterrupts;
  36.  
  37. - (IOReturn) enableInterrupt    : (unsigned int) localInterrupt;
  38. - (void) disableInterrupt    : (unsigned int) localInterrupt;
  39.  
  40. /*
  41.  *  Implement this methods to provide your own function as the handler for a
  42.  *  particular local interrupt, and to specify a level for that handler to run
  43.  *  at.  You can also specify an argument that get's passed to your handler.
  44.  *  This method will be called once before an interrupt is enabled.
  45.  *
  46.  *  This method returns NO by default.
  47.  */
  48. - (BOOL) getHandler        : (IOEISAInterruptHandler *)handler
  49.                         level : (unsigned int *)ipl
  50.                  argument : (unsigned int *) arg
  51.                   forInterrupt : (unsigned int) localInterrupt;
  52.  
  53. /*
  54.  * Determine whether localChannel's DMA is complete.
  55.  */
  56. - (BOOL) isDMADone:(unsigned int) localChannel;
  57.  
  58. /*
  59.  *  Methods to map device memory into the calling task's address space.
  60.  */
  61. - (IOReturn) mapMemoryRange    : (unsigned int) localRange
  62.                  to : (vm_address_t *) destAddr
  63.               findSpace : (BOOL) findSpace
  64.               cache : (IOCache) cache;
  65.  
  66. - (void) unmapMemoryRange     : (unsigned int) localRange;
  67.  
  68. /*
  69.  *  Methods to reserve and enable DMA channels.  Also, methods to obtain
  70.  *  buffers for DMA, and do DMA using those buffers.
  71.  */
  72. - (IOReturn) enableChannel    : (unsigned int) localChannel;
  73. - (void) disableChannel        : (unsigned int) localChannel;
  74.  
  75. /*
  76.  * Specify basic DMA transfer mode.
  77.  */
  78. typedef enum {
  79.     IO_Demand,
  80.     IO_Single,
  81.     IO_Block,
  82.     IO_Cascade,
  83. } IODMATransferMode;
  84.  
  85. - (IOReturn) setTransferMode    : (IODMATransferMode) mode 
  86.              forChannel : (unsigned int) localChannel;
  87.  
  88. /*
  89.  * Enable/disable autoinitialize DMA mode. Default is 
  90.  * disabled.
  91.  */
  92. - (IOReturn)setAutoinitialize      : (BOOL)flag
  93.                     forChannel     : (unsigned)localChannel;
  94.  
  95. /*
  96.  * Set DMA address increment/decrement mode.
  97.  * Default is IO_Increment.
  98.  */
  99. typedef enum {
  100.     IO_Increment,
  101.     IO_Decrement,
  102. } IOIncrementMode;
  103.  
  104. - (IOReturn)setIncrementMode       : (IOIncrementMode)mode
  105.                     forChannel     : (unsigned)localChannel;
  106.  
  107. /*
  108.  *  Returns a DMA buffer for the contents of physical memory starting at
  109.  *  addr and continuing for length bytes.  If the physical address changed
  110.  *  to accommodate the ISA bus, the new physical address is returned in
  111.  *  place.  The IOEISADMABuffer is an opaque type.
  112.  */
  113. - (IOEISADMABuffer) createDMABufferFor:(unsigned int *) physAddr
  114.              length    : (unsigned int) length
  115.                read : (BOOL) isRead
  116.          needsLowMemory : (BOOL) lowerMem
  117.               limitSize : (BOOL) limitSize;
  118.  
  119. /*
  120.  *  Complete DMA on, and free, the given DMABuffer.  If the DMA was a read,
  121.  *  and the buffer relocated the original physical memory, then the relocated
  122.  *  memory is copied to the source in this step.
  123.  */
  124. - (void) freeDMABuffer        : (IOEISADMABuffer) buffer;
  125.  
  126. /*
  127.  *  Like -freeDMABuffer, except it doesn't copy the memory.
  128.  */
  129. - (void) abortDMABuffer        : (IOEISADMABuffer) buffer;
  130.  
  131. /*
  132.  *  Perform host-master DMA using the given DMABuffer on the given DMA channel.
  133.  */
  134. - (IOReturn) startDMAForBuffer    : (IOEISADMABuffer) buffer
  135.             channel : (unsigned int) localChannel;
  136.  
  137. /*
  138.  * Return localChannel's current address and count.
  139.  */
  140. - (unsigned)currentAddressForChannel : (unsigned)localChannel; 
  141. - (unsigned)currentCountForChannel   : (unsigned)localChannel;
  142.  
  143. /*
  144.  *  Methods to reserve resources.  You don't normally need to call these, as
  145.  *  they're called automatically when IOEISADirectDevice is initialized with
  146.  *  the -initFromDeviceDescription method.
  147.  */
  148. - (IOReturn) reservePortRange    : (unsigned int) localPortRange;
  149. - (void) releasePortRange    : (unsigned int) localPortRange;
  150.  
  151. - (IOReturn) reserveInterrupt    : (unsigned int)localInterrupt;
  152. - (void) releaseInterrupt    : (unsigned int) localInterrupt;
  153.  
  154. - (IOReturn) reserveChannel    : (unsigned int) localChannel;
  155. - (void) releaseChannel        : (unsigned int) localChannel;
  156.  
  157. /*
  158.  * Reserve and release exclusive DMA lock. Use is optional; provides
  159.  * exclusion between mutually incompatible DMA devices.
  160.  */
  161. - (void)reserveDMALock;
  162. - (void)releaseDMALock;
  163.  
  164. /*
  165.  * Determine whether or not the associated device is connected to an EISA 
  166.  * bus. Returns YES if so, else returns NO.
  167.  */
  168. - (BOOL)isEISAPresent;
  169.  
  170. /*
  171.  * Support for the extended mode register (EISA only).
  172.  */
  173.  
  174. /*
  175.  * Select transfer width. Default is IO_8Bit.
  176.  */
  177. typedef enum {
  178.     IO_8Bit,            // 8  bit I/O, count by bytes
  179.     IO_16BitWordCount,        // 16 bit I/O, count by words
  180.                     //   (not currently supported)
  181.     IO_16BitByteCount,        // 16 bit I/O, count by bytes
  182.     IO_32Bit,            // 32 bit I/O, count by bytes
  183. } IOEISADMATransferWidth;
  184.  
  185.  
  186. - (IOReturn)setDMATransferWidth    : (IOEISADMATransferWidth)width
  187.                      forChannel : (unsigned)localChannel;
  188.  
  189. /*
  190.  * Select DMA Timing. Default is IO_Compatible. 
  191.  */
  192. typedef enum {
  193.     IO_Compatible,    
  194.     IO_TypeA,
  195.     IO_TypeB,
  196.     IO_Burst,    
  197. } IOEISADMATiming;
  198.  
  199. - (IOReturn)setDMATiming    : (IOEISADMATiming)timing
  200.                      forChannel : (unsigned)localChannel;
  201.  
  202. /*
  203.  * Select whether EOP pin is output (default) or input.
  204.  */
  205. - (IOReturn)setEOPAsOutput    : (BOOL)flag
  206.                      forChannel    : (unsigned)localChannel;
  207.  
  208. /*
  209.  * Enable Stop register. Default is disabled.
  210.  */
  211. typedef enum {
  212.     IO_StopRegisterEnable,
  213.     IO_StopRegisterDisable,
  214. } IOEISAStopRegisterMode;
  215.  
  216. - (IOReturn)setStopRegisterMode : (IOEISAStopRegisterMode)mode
  217.                     forChannel     : (unsigned)localChannel;
  218.  
  219. @end
  220.